#ifndef   __DAEMON_HPP__
#define __DAEMON_HPP__

#include <sys/signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <string>
#include <fcntl.h>

const std::string defaultdir = "/";
const std::string nullfile = "/dev/null";

void Deamon(bool ischdir , bool isclose)
{
    // 1.忽略信号
    signal(SIGPIPE , SIG_IGN);
    signal(SIGPIPE , SIG_IGN);
    signal(SIGSTOP , SIG_IGN);

    // 2. 自成会话
    if(fork() > 0 ) exit(0);   // 父进程直接退出
    setsid();

    if(ischdir)
        chdir(defaultdir.c_str());

    if(isclose)    // 是否关闭文件
    {
        close(0);
        close(1);
        close(2);
    }
    else
    {
        int fd = open(nullfile.c_str() , O_RDWR);
        dup2(fd , 0);
        dup2(fd , 1);
        dup2(fd , 2);
    }
}



#endif